当前位置: GO > go 协程池

go 协程池

2024-04-03 分类:GO 作者:admin 阅读(28)

尤其注意:在并发情况下,对一个channel进行多协程消费,并不能保证每个元素只被消费一次。(通常是每个与元素至少一次)

所以在Worker方法中加锁,保证并发安全。加锁虽然是在 for range 循环内部,但在每次循环中都会先获取互斥锁 lock,然后再执行任务相关的操作,最后释放互斥锁。这样的确可以视作在通道操作上加了互斥锁。


调用逻辑如下:

2025.02.14:

无法复现出channel的线程安全问题。

deepSeek: 加不加锁的区别

场景 不加锁 加锁
线程安全 是(通道操作是线程安全的) 是(通道操作是线程安全的)
性能 可能更好,因为没有锁的开销 可能稍差,因为锁会增加额外的开销
协程竞争 多个协程可能同时阻塞在 semaphore <- struct{}{},增加等待时间 每次只有一个协程尝试向 semaphore 发送数据,减少竞争
适用场景 并发量较小,或者对性能要求较高 并发量较大,或者需要严格控制协程的启动顺序

「三年博客,如果觉得我的文章对您有用,请帮助本站成长」

赞(0) 打赏

支付宝
微信
0

支付宝
微信
标签:

上一篇:

下一篇:

你可能感兴趣

共有 0 - go 协程池

博客简介

精彩评论

  • admin(6年前 (2020-03-09))

    分别用不同厚度的筏板定义,画图后这设置筏板变截面处理。 http://f.fwxgx.co...

    评:新文章!
  • admin(6年前 (2020-03-09))

    分别用不同厚度的筏板定义,画图后这设置筏板变截面处理。 http://f.fwxgx.co...

    评:新文章!
  • admin(6年前 (2020-03-09))

    新增一个框架图! http://biji.jinli.vip/wp-content/upl...

    评:新文章!
  • 一位WordPress评论者(6年前 (2020-02-13))

    嗨,这是一条评论。 要开始审核、编辑及删除评论,请访问仪表盘的“评论”页面。 评论者头像来自...

    评:世界,您好!